<!DOCTYPE html>
<html>
    <head>
        <!-- 
            3.1 语法
                3.1.1 区分大小写
                    在es中无论是变量还是函数或者操作符都区分大小写
                3.1.2 标识符
                    所谓标识符就是变量、函数、属性或者函数参数的名称。采用小驼峰的方式，首字符必须是字母或者_或者$,剩下的可以是字母下划线和$或数字。
                3.1.3 注释
                    // 单行注释
                    /* */ 多行注释
                3.1.4 严格模式
                    "use strict";
                3.1.5 语句

            3.2 关键字与保留字

            3.3 变量
                3.3.1 var关键字
                    总结：不初始化的情况，是undefined
                        不仅可以改变变量的值还可以改变变量的类型
                    1.var 的作用域
                        如果在方法中定义 var 变量，那么这个变量是局部变量
                        如果不用var开头，则是全局变量，但是严格模式会报错，报ReferenceError
                    2.var 声明提升
                        把所有的变量声明都拉倒函数作用域的顶部。
                        可以反复的声明一个变量。
                3.3.2   let声明
                    总结：范围是块级作用域
                        let不允许同一个块作用域出现重复声明
                        如果let和var同时声明一个变量会报错
                    1.暂时性死区 
                        声明了let的上行和下行都不能再次声明，声明了就会报错
                        temp='1'
                        let temp = 1; 会报错 ReferenceError
                    2.全局声明
                        使用var声明的全局变量会变成Windows属性
                        使用let在全局作用域中声明的变量不会变成Windows的属性
                    3.条件声明
                        let的作用域是块级，所以不能检查前面释放已经使用let声明过同名变量，
                        同时也就不可能在没有声明的情况下声明它，没法声明提升。
                    4.for循环中的let声明
                        如果用var 得出的结果都是一个值，因为在退出循环的时候迭代变量保存的是导致循环退出的值。
                        let声明迭代变量时，js引擎在后台会为每个迭代循环声明一个新的迭代变量。
                        for in 和 for of 同理
                3.3.3 const 声明
                    总结：块级作用域，声明时必须同时初始化变量，且不能修改。
                        同时也不能重复声明，但是如果声明的是引用的对象，则可以对象的内部属性。
                        普通for循环不能使用const，但是for of 和 for in 可以。
                3.3.4 声明风格及最佳实践
                    1.尽量不使用var
                    2.const优先，let次之
         -->
    </head>
    <body>
        <!--  -->
    </body>
</html>